// Promise 解决问题
// readdir promise 
// stat Promise.all([])
// stats 

const fs=require('fs');
const path=require('path');

const readDir=function(dir){
    return new Promise(function(resolve,reject){
        fs.readdir(dir,function(err,files){
            if(err) reject(err);
            resolve(files);
        })
    })
}

function stat(path){
    return new Promise(function(resolve,reject){
        fs.stat(path,function(err,stat){
            if(err) reject(err);
            resolve(stat);
        })
    })
}

function findLargest(dir){
    return readDir(dir)
            .then((files)=>{
                console.log(files);
                let statPromises=files.map((file)=>stat(path.join(dir,file)));
                // return Promise stat
                // Promise.all 确保所有异步全部解决
                // 并且返回的结果也是数组,结果按顺序放置
                return Promise.all(statPromises).then(function(stats){
                    return {stats,files};
                });
            })
            .then(({stats,files})=>{
                let largest=stats
                    .filter(function(stat){
                        return stat.isFile();
                    })
                    .reduce(function(prev,next){
                        if(prev.size>next.size) return prev;
                        return next;
                    })
                return files[stats.indexOf(largest)];
            })
}

findLargest('./src')
    .then(function(filename){
        console.log('largest file was:',filename);
    })
    .catch(function(error){
        console.log(error);
    })